From 25725077212d85b1ed229cb320bb3e40e1cb33a8 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 9 May 2008 20:18:35 +0000 Subject: [PATCH] * add OutputPage::addScriptFile() for easier adding of JS files, similar to OutputPage::addStyle() * broke Special:Allmessages-specific JS out of wikibits.js to allmessages.js --- includes/DefaultSettings.php | 2 +- includes/EditPage.php | 6 +-- includes/OutputPage.php | 27 ++++++++--- includes/SpecialAllmessages.php | 1 + skins/common/allmessages.js | 83 ++++++++++++++++++++++++++++++++ skins/common/wikibits.js | 84 --------------------------------- 6 files changed, 108 insertions(+), 95 deletions(-) create mode 100644 skins/common/allmessages.js diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index fecd94e5c2..5992757577 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -1347,7 +1347,7 @@ $wgCacheEpoch = '20030516000000'; * to ensure that client-side caches don't keep obsolete copies of global * styles. */ -$wgStyleVersion = '141'; +$wgStyleVersion = '142'; # Server-side caching: diff --git a/includes/EditPage.php b/includes/EditPage.php index 3efd454e82..684ed661b8 100644 --- a/includes/EditPage.php +++ b/includes/EditPage.php @@ -1463,10 +1463,8 @@ END * of the preview button */ function doLivePreviewScript() { - global $wgStylePath, $wgJsMimeType, $wgStyleVersion, $wgOut, $wgTitle; - $wgOut->addHTML( '' . "\n" ); + global $wgOut, $wgTitle; + $wgOut->addScriptFile( 'preview.js' ); $liveAction = $wgTitle->getLocalUrl( 'action=submit&wpPreview=true&live=true' ); return "return !lpDoPreview(" . "editform.wpTextbox1.value," . diff --git a/includes/OutputPage.php b/includes/OutputPage.php index 190042ed8d..dbd275da4c 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -90,6 +90,21 @@ class OutputPage { 'href' => $wgStylePath . '/' . $style . '?' . $wgStyleVersion ) ); } + /** + * Add a JavaScript file out of skins/common, or a given relative path. + * @param string $file filename in skins/common or complete on-server path (/foo/bar.js) + */ + function addScriptFile( $file ) { + global $wgStylePath, $wgStyleVersion, $wgJsMimeType; + if( substr( $file, 0, 1 ) == '/' ) { + $path = $file; + } else { + $path = "{$wgStylePath}/common/{$file}"; + } + $encPath = htmlspecialchars( $path ); + $this->addScript( "\n" ); + } + /** * Add a self-contained script tag with the given contents * @param string $script JavaScript text, no \n" ); + $this->addScriptFile( 'ajax.js' ); wfRunHooks( 'AjaxAddScript', array( &$this ) ); if( $wgAjaxSearch && $wgUser->getBoolOption( 'ajaxsearch' ) ) { - $this->addScript( "\n" ); + $this->addScriptFile( 'ajaxsearch.js' ); $this->addScript( "\n" ); } if( $wgAjaxWatch && $wgUser->isLoggedIn() ) { - $this->addScript( "\n" ); + $this->addScriptFile( 'ajaxwatch.js' ); } if ( $wgEnableMWSuggest && !$wgUser->getOption( 'disablesuggest', false ) ){ - $this->addScript( "\n" ); + $this->addScriptFile( 'mwsuggest.js' ); } } diff --git a/includes/SpecialAllmessages.php b/includes/SpecialAllmessages.php index 6aa1e9020e..462c326e3e 100644 --- a/includes/SpecialAllmessages.php +++ b/includes/SpecialAllmessages.php @@ -41,6 +41,7 @@ function wfSpecialAllmessages() { wfProfileOut( __METHOD__ . '-setup' ); wfProfileIn( __METHOD__ . '-output' ); + $wgOut->addScriptFile( 'allmessages.js' ); if ( $ot == 'php' ) { $navText .= wfAllMessagesMakePhp( $messages ); $wgOut->addHTML( 'PHP | HTML | ' . diff --git a/skins/common/allmessages.js b/skins/common/allmessages.js new file mode 100644 index 0000000000..d95a142280 --- /dev/null +++ b/skins/common/allmessages.js @@ -0,0 +1,83 @@ +var allmessages_nodelist = false; +var allmessages_modified = false; +var allmessages_timeout = false; +var allmessages_running = false; + +function allmessagesmodified() { + allmessages_modified = !allmessages_modified; + allmessagesfilter(); +} + +function allmessagesfilter() { + if ( allmessages_timeout ) + window.clearTimeout( allmessages_timeout ); + + if ( !allmessages_running ) + allmessages_timeout = window.setTimeout( 'allmessagesfilter_do();', 500 ); +} + +function allmessagesfilter_do() { + if ( !allmessages_nodelist ) + return; + + var text = document.getElementById('allmessagesinput').value; + var nodef = allmessages_modified; + + allmessages_running = true; + + for ( var name in allmessages_nodelist ) { + var nodes = allmessages_nodelist[name]; + var display = ( name.indexOf( text ) == -1 ? 'none' : '' ); + + for ( var i = 0; i < nodes.length; i++) + nodes[i].style.display = + ( nodes[i].className == "def" && nodef + ? 'none' : display ); + } + + if ( text != document.getElementById('allmessagesinput').value || + nodef != allmessages_modified ) + allmessagesfilter_do(); // repeat + + allmessages_running = false; +} + +function allmessagesfilter_init() { + if ( allmessages_nodelist ) + return; + + var nodelist = new Array(); + var templist = new Array(); + + var table = document.getElementById('allmessagestable'); + if ( !table ) return; + + var rows = document.getElementsByTagName('tr'); + for ( var i = 0; i < rows.length; i++ ) { + var id = rows[i].getAttribute('id') + if ( id && id.substring(0,16) != 'sp-allmessages-r' ) continue; + templist[ id ] = rows[i]; + } + + var spans = table.getElementsByTagName('span'); + for ( var i = 0; i < spans.length; i++ ) { + var id = spans[i].getAttribute('id') + if ( id && id.substring(0,17) != 'sp-allmessages-i-' ) continue; + if ( !spans[i].firstChild || spans[i].firstChild.nodeType != 3 ) continue; + + var nodes = new Array(); + var row1 = templist[ id.replace('i', 'r1') ]; + var row2 = templist[ id.replace('i', 'r2') ]; + + if ( row1 ) nodes[nodes.length] = row1; + if ( row2 ) nodes[nodes.length] = row2; + nodelist[ spans[i].firstChild.nodeValue ] = nodes; + } + + var k = document.getElementById('allmessagesfilter'); + if (k) { k.style.display = ''; } + + allmessages_nodelist = nodelist; +} + +hookEvent( "load", allmessagesfilter_init ); diff --git a/skins/common/wikibits.js b/skins/common/wikibits.js index b3b6c402b7..354654583f 100644 --- a/skins/common/wikibits.js +++ b/skins/common/wikibits.js @@ -798,90 +798,6 @@ function scrollEditBox() { } hookEvent( 'load', scrollEditBox ); -var allmessages_nodelist = false; -var allmessages_modified = false; -var allmessages_timeout = false; -var allmessages_running = false; - -function allmessagesmodified() { - allmessages_modified = !allmessages_modified; - allmessagesfilter(); -} - -function allmessagesfilter() { - if ( allmessages_timeout ) - window.clearTimeout( allmessages_timeout ); - - if ( !allmessages_running ) - allmessages_timeout = window.setTimeout( 'allmessagesfilter_do();', 500 ); -} - -function allmessagesfilter_do() { - if ( !allmessages_nodelist ) - return; - - var text = document.getElementById('allmessagesinput').value; - var nodef = allmessages_modified; - - allmessages_running = true; - - for ( var name in allmessages_nodelist ) { - var nodes = allmessages_nodelist[name]; - var display = ( name.indexOf( text ) == -1 ? 'none' : '' ); - - for ( var i = 0; i < nodes.length; i++) - nodes[i].style.display = - ( nodes[i].className == "def" && nodef - ? 'none' : display ); - } - - if ( text != document.getElementById('allmessagesinput').value || - nodef != allmessages_modified ) - allmessagesfilter_do(); // repeat - - allmessages_running = false; -} - -function allmessagesfilter_init() { - if ( allmessages_nodelist ) - return; - - var nodelist = new Array(); - var templist = new Array(); - - var table = document.getElementById('allmessagestable'); - if ( !table ) return; - - var rows = document.getElementsByTagName('tr'); - for ( var i = 0; i < rows.length; i++ ) { - var id = rows[i].getAttribute('id') - if ( id && id.substring(0,16) != 'sp-allmessages-r' ) continue; - templist[ id ] = rows[i]; - } - - var spans = table.getElementsByTagName('span'); - for ( var i = 0; i < spans.length; i++ ) { - var id = spans[i].getAttribute('id') - if ( id && id.substring(0,17) != 'sp-allmessages-i-' ) continue; - if ( !spans[i].firstChild || spans[i].firstChild.nodeType != 3 ) continue; - - var nodes = new Array(); - var row1 = templist[ id.replace('i', 'r1') ]; - var row2 = templist[ id.replace('i', 'r2') ]; - - if ( row1 ) nodes[nodes.length] = row1; - if ( row2 ) nodes[nodes.length] = row2; - nodelist[ spans[i].firstChild.nodeValue ] = nodes; - } - - var k = document.getElementById('allmessagesfilter'); - if (k) { k.style.display = ''; } - - allmessages_nodelist = nodelist; -} - -hookEvent( "load", allmessagesfilter_init ); - /* Written by Jonathan Snook, http://www.snook.ca/jonathan Add-ons by Robert Nyman, http://www.robertnyman.com -- 2.20.1